﻿using System;
namespace Producers.Arireg.Xtee.Riik.Ee.Producer.Arireg {
    
    
    [global::Xtee.Core.Attributes.XmlTypeAttribute(Name="detailandmed_v5_valismaa_ariyhing", Namespace="http://producers.arireg.xtee.riik.ee/producer/arireg", Target=typeof(DetailandmedV5ValismaaAriyhing))]
    public class DetailandmedV5ValismaaAriyhingSerializer : global::Xtee.Core.Types.AbstractXteeSerializable {
        
        protected IDetailandmedV5ValismaaAriyhing clazz;
        
        public DetailandmedV5ValismaaAriyhingSerializer(IDetailandmedV5ValismaaAriyhing clazz) {
            this.clazz = clazz;
        }
        
        public override void WriteXml(global::Xtee.Core.IXteeXmlWriter Writer) {
            base.WriteXml(Writer);
            Writer.WriteStartElement("arinimi");
            if (clazz.Arinimi!=null) {
                global::Xtee.Core.SerializationMetadata metaArinimi = this.GetMetaData(clazz.Arinimi);
                Writer.WriteTypeAttribute(metaArinimi.TypeQualifiedName.Namespace, metaArinimi.TypeQualifiedName.Name);
                metaArinimi.NewSerializer(clazz.Arinimi).WriteXml(Writer);
            }
            else {
                throw new global::Xtee.Core.Exceptions.NillableNotAllowedException("Nullable is not allowed for element : Arinimi");
            }
            Writer.WriteEndElement();
            Writer.WriteStartElement("asukoht");
            if (clazz.Asukoht!=null) {
                global::Xtee.Core.SerializationMetadata metaAsukoht = this.GetMetaData(clazz.Asukoht);
                Writer.WriteTypeAttribute(metaAsukoht.TypeQualifiedName.Namespace, metaAsukoht.TypeQualifiedName.Name);
                metaAsukoht.NewSerializer(clazz.Asukoht).WriteXml(Writer);
            }
            else {
                throw new global::Xtee.Core.Exceptions.NillableNotAllowedException("Nullable is not allowed for element : Asukoht");
            }
            Writer.WriteEndElement();
            Writer.WriteStartElement("sarnane_eesti_oiguslik_vorm");
            if (clazz.SarnaneEestiOiguslikVorm!=null) {
                global::Xtee.Core.SerializationMetadata metaSarnaneEestiOiguslikVorm = this.GetMetaData(clazz.SarnaneEestiOiguslikVorm);
                Writer.WriteTypeAttribute(metaSarnaneEestiOiguslikVorm.TypeQualifiedName.Namespace, metaSarnaneEestiOiguslikVorm.TypeQualifiedName.Name);
                metaSarnaneEestiOiguslikVorm.NewSerializer(clazz.SarnaneEestiOiguslikVorm).WriteXml(Writer);
            }
            else {
                throw new global::Xtee.Core.Exceptions.NillableNotAllowedException("Nullable is not allowed for element : SarnaneEestiOiguslikVorm");
            }
            Writer.WriteEndElement();
            Writer.WriteStartElement("sarnane_eesti_oiguslik_vorm_markus");
            if (clazz.SarnaneEestiOiguslikVormMarkus!=null) {
                global::Xtee.Core.SerializationMetadata metaSarnaneEestiOiguslikVormMarkus = this.GetMetaData(clazz.SarnaneEestiOiguslikVormMarkus);
                Writer.WriteTypeAttribute(metaSarnaneEestiOiguslikVormMarkus.TypeQualifiedName.Namespace, metaSarnaneEestiOiguslikVormMarkus.TypeQualifiedName.Name);
                metaSarnaneEestiOiguslikVormMarkus.NewSerializer(clazz.SarnaneEestiOiguslikVormMarkus).WriteXml(Writer);
            }
            else {
                throw new global::Xtee.Core.Exceptions.NillableNotAllowedException("Nullable is not allowed for element : SarnaneEestiOiguslikVormMarkus");
            }
            Writer.WriteEndElement();
            Writer.WriteStartElement("maa_mille_seaduse_alusel_tegutseb");
            if (clazz.MaaMilleSeaduseAluselTegutseb!=null) {
                global::Xtee.Core.SerializationMetadata metaMaaMilleSeaduseAluselTegutseb = this.GetMetaData(clazz.MaaMilleSeaduseAluselTegutseb);
                Writer.WriteTypeAttribute(metaMaaMilleSeaduseAluselTegutseb.TypeQualifiedName.Namespace, metaMaaMilleSeaduseAluselTegutseb.TypeQualifiedName.Name);
                metaMaaMilleSeaduseAluselTegutseb.NewSerializer(clazz.MaaMilleSeaduseAluselTegutseb).WriteXml(Writer);
            }
            else {
                throw new global::Xtee.Core.Exceptions.NillableNotAllowedException("Nullable is not allowed for element : MaaMilleSeaduseAluselTegutseb");
            }
            Writer.WriteEndElement();
            Writer.WriteStartElement("maa_mille_seaduse_alusel_tegutseb_markus");
            if (clazz.MaaMilleSeaduseAluselTegutsebMarkus!=null) {
                global::Xtee.Core.SerializationMetadata metaMaaMilleSeaduseAluselTegutsebMarkus = this.GetMetaData(clazz.MaaMilleSeaduseAluselTegutsebMarkus);
                Writer.WriteTypeAttribute(metaMaaMilleSeaduseAluselTegutsebMarkus.TypeQualifiedName.Namespace, metaMaaMilleSeaduseAluselTegutsebMarkus.TypeQualifiedName.Name);
                metaMaaMilleSeaduseAluselTegutsebMarkus.NewSerializer(clazz.MaaMilleSeaduseAluselTegutsebMarkus).WriteXml(Writer);
            }
            else {
                throw new global::Xtee.Core.Exceptions.NillableNotAllowedException("Nullable is not allowed for element : MaaMilleSeaduseAluselTegutsebMarkus");
            }
            Writer.WriteEndElement();
            Writer.WriteStartElement("register");
            if (clazz.Register!=null) {
                global::Xtee.Core.SerializationMetadata metaRegister = this.GetMetaData(clazz.Register);
                Writer.WriteTypeAttribute(metaRegister.TypeQualifiedName.Namespace, metaRegister.TypeQualifiedName.Name);
                metaRegister.NewSerializer(clazz.Register).WriteXml(Writer);
            }
            else {
                throw new global::Xtee.Core.Exceptions.NillableNotAllowedException("Nullable is not allowed for element : Register");
            }
            Writer.WriteEndElement();
            Writer.WriteStartElement("registreerimisnumber");
            if (clazz.Registreerimisnumber!=null) {
                global::Xtee.Core.SerializationMetadata metaRegistreerimisnumber = this.GetMetaData(clazz.Registreerimisnumber);
                Writer.WriteTypeAttribute(metaRegistreerimisnumber.TypeQualifiedName.Namespace, metaRegistreerimisnumber.TypeQualifiedName.Name);
                metaRegistreerimisnumber.NewSerializer(clazz.Registreerimisnumber).WriteXml(Writer);
            }
            else {
                throw new global::Xtee.Core.Exceptions.NillableNotAllowedException("Nullable is not allowed for element : Registreerimisnumber");
            }
            Writer.WriteEndElement();
            Writer.WriteStartElement("majandusaasta_aruande_avalikustamise_kohustus");
            if (clazz.MajandusaastaAruandeAvalikustamiseKohustus!=null) {
                global::Xtee.Core.SerializationMetadata metaMajandusaastaAruandeAvalikustamiseKohustus = this.GetMetaData(clazz.MajandusaastaAruandeAvalikustamiseKohustus);
                Writer.WriteTypeAttribute(metaMajandusaastaAruandeAvalikustamiseKohustus.TypeQualifiedName.Namespace, metaMajandusaastaAruandeAvalikustamiseKohustus.TypeQualifiedName.Name);
                metaMajandusaastaAruandeAvalikustamiseKohustus.NewSerializer(clazz.MajandusaastaAruandeAvalikustamiseKohustus).WriteXml(Writer);
            }
            else {
                throw new global::Xtee.Core.Exceptions.NillableNotAllowedException("Nullable is not allowed for element : MajandusaastaAruandeAvalikustamiseKohustus");
            }
            Writer.WriteEndElement();
        }
        
        public override void ReadXml(global::Xtee.Core.IXteeXmlReader Reader) {
            base.ReadXml(Reader);
            if (Reader.LocalName=="arinimi") {
                if (Reader.IsElementNil()) {
                    throw new global::Xtee.Core.Exceptions.NillableNotAllowedException(">>detailandmed_v5_valismaa_ariyhing>arinimi");
                }
                global::Xtee.Core.SerializationMetadata metaArinimi = this.GetMetaData<global::Producers.Arireg.Xtee.Riik.Ee.Producer.Arireg.IDetailandmedV5VaArinimed>(Reader, "detailandmed_v5_va_arinimed", "http://producers.arireg.xtee.riik.ee/producer/arireg");
                clazz.Arinimi = metaArinimi.NewEntity<global::Producers.Arireg.Xtee.Riik.Ee.Producer.Arireg.IDetailandmedV5VaArinimed>();
                if ((Reader.IsEmptyElement == false)) {
                    Reader.ReadStartElement("arinimi");
                    metaArinimi.NewSerializer(clazz.Arinimi).ReadXml(Reader);
                    Reader.ReadEndElement();
                }
                else {
                    Reader.Skip();
                }
            }
            else {
                throw new global::Xtee.Core.Exceptions.UnExpectedElementException(">>detailandmed_v5_valismaa_ariyhing>arinimi", Reader.LocalName);
            }
            if (Reader.LocalName=="asukoht") {
                if (Reader.IsElementNil()) {
                    throw new global::Xtee.Core.Exceptions.NillableNotAllowedException(">>detailandmed_v5_valismaa_ariyhing>asukoht");
                }
                global::Xtee.Core.SerializationMetadata metaAsukoht = this.GetMetaData<global::Producers.Arireg.Xtee.Riik.Ee.Producer.Arireg.IDetailandmedV5VaAsukohad>(Reader, "detailandmed_v5_va_asukohad", "http://producers.arireg.xtee.riik.ee/producer/arireg");
                clazz.Asukoht = metaAsukoht.NewEntity<global::Producers.Arireg.Xtee.Riik.Ee.Producer.Arireg.IDetailandmedV5VaAsukohad>();
                if ((Reader.IsEmptyElement == false)) {
                    Reader.ReadStartElement("asukoht");
                    metaAsukoht.NewSerializer(clazz.Asukoht).ReadXml(Reader);
                    Reader.ReadEndElement();
                }
                else {
                    Reader.Skip();
                }
            }
            else {
                throw new global::Xtee.Core.Exceptions.UnExpectedElementException(">>detailandmed_v5_valismaa_ariyhing>asukoht", Reader.LocalName);
            }
            if (Reader.LocalName=="sarnane_eesti_oiguslik_vorm") {
                if (Reader.IsElementNil()) {
                    throw new global::Xtee.Core.Exceptions.NillableNotAllowedException(">>detailandmed_v5_valismaa_ariyhing>sarnane_eesti_oiguslik_vorm");
                }
                global::Xtee.Core.SerializationMetadata metaSarnaneEestiOiguslikVorm = this.GetMetaData<global::Producers.Arireg.Xtee.Riik.Ee.Producer.Arireg.IDetailandmedV5VaSisud>(Reader, "detailandmed_v5_va_sisud", "http://producers.arireg.xtee.riik.ee/producer/arireg");
                clazz.SarnaneEestiOiguslikVorm = metaSarnaneEestiOiguslikVorm.NewEntity<global::Producers.Arireg.Xtee.Riik.Ee.Producer.Arireg.IDetailandmedV5VaSisud>();
                if ((Reader.IsEmptyElement == false)) {
                    Reader.ReadStartElement("sarnane_eesti_oiguslik_vorm");
                    metaSarnaneEestiOiguslikVorm.NewSerializer(clazz.SarnaneEestiOiguslikVorm).ReadXml(Reader);
                    Reader.ReadEndElement();
                }
                else {
                    Reader.Skip();
                }
            }
            else {
                throw new global::Xtee.Core.Exceptions.UnExpectedElementException(">>detailandmed_v5_valismaa_ariyhing>sarnane_eesti_oiguslik_vorm", Reader.LocalName);
            }
            if (Reader.LocalName=="sarnane_eesti_oiguslik_vorm_markus") {
                if (Reader.IsElementNil()) {
                    throw new global::Xtee.Core.Exceptions.NillableNotAllowedException(">>detailandmed_v5_valismaa_ariyhing>sarnane_eesti_oiguslik_vorm_markus");
                }
                global::Xtee.Core.SerializationMetadata metaSarnaneEestiOiguslikVormMarkus = this.GetMetaData<global::Producers.Arireg.Xtee.Riik.Ee.Producer.Arireg.IDetailandmedV5VaSisud>(Reader, "detailandmed_v5_va_sisud", "http://producers.arireg.xtee.riik.ee/producer/arireg");
                clazz.SarnaneEestiOiguslikVormMarkus = metaSarnaneEestiOiguslikVormMarkus.NewEntity<global::Producers.Arireg.Xtee.Riik.Ee.Producer.Arireg.IDetailandmedV5VaSisud>();
                if ((Reader.IsEmptyElement == false)) {
                    Reader.ReadStartElement("sarnane_eesti_oiguslik_vorm_markus");
                    metaSarnaneEestiOiguslikVormMarkus.NewSerializer(clazz.SarnaneEestiOiguslikVormMarkus).ReadXml(Reader);
                    Reader.ReadEndElement();
                }
                else {
                    Reader.Skip();
                }
            }
            else {
                throw new global::Xtee.Core.Exceptions.UnExpectedElementException(">>detailandmed_v5_valismaa_ariyhing>sarnane_eesti_oiguslik_vorm_markus", Reader.LocalName);
            }
            if (Reader.LocalName=="maa_mille_seaduse_alusel_tegutseb") {
                if (Reader.IsElementNil()) {
                    throw new global::Xtee.Core.Exceptions.NillableNotAllowedException(">>detailandmed_v5_valismaa_ariyhing>maa_mille_seaduse_alusel_tegutseb");
                }
                global::Xtee.Core.SerializationMetadata metaMaaMilleSeaduseAluselTegutseb = this.GetMetaData<global::Producers.Arireg.Xtee.Riik.Ee.Producer.Arireg.IDetailandmedV5VaSisud>(Reader, "detailandmed_v5_va_sisud", "http://producers.arireg.xtee.riik.ee/producer/arireg");
                clazz.MaaMilleSeaduseAluselTegutseb = metaMaaMilleSeaduseAluselTegutseb.NewEntity<global::Producers.Arireg.Xtee.Riik.Ee.Producer.Arireg.IDetailandmedV5VaSisud>();
                if ((Reader.IsEmptyElement == false)) {
                    Reader.ReadStartElement("maa_mille_seaduse_alusel_tegutseb");
                    metaMaaMilleSeaduseAluselTegutseb.NewSerializer(clazz.MaaMilleSeaduseAluselTegutseb).ReadXml(Reader);
                    Reader.ReadEndElement();
                }
                else {
                    Reader.Skip();
                }
            }
            else {
                throw new global::Xtee.Core.Exceptions.UnExpectedElementException(">>detailandmed_v5_valismaa_ariyhing>maa_mille_seaduse_alusel_tegutseb", Reader.LocalName);
            }
            if (Reader.LocalName=="maa_mille_seaduse_alusel_tegutseb_markus") {
                if (Reader.IsElementNil()) {
                    throw new global::Xtee.Core.Exceptions.NillableNotAllowedException(">>detailandmed_v5_valismaa_ariyhing>maa_mille_seaduse_alusel_tegutseb_markus");
                }
                global::Xtee.Core.SerializationMetadata metaMaaMilleSeaduseAluselTegutsebMarkus = this.GetMetaData<global::Producers.Arireg.Xtee.Riik.Ee.Producer.Arireg.IDetailandmedV5VaSisud>(Reader, "detailandmed_v5_va_sisud", "http://producers.arireg.xtee.riik.ee/producer/arireg");
                clazz.MaaMilleSeaduseAluselTegutsebMarkus = metaMaaMilleSeaduseAluselTegutsebMarkus.NewEntity<global::Producers.Arireg.Xtee.Riik.Ee.Producer.Arireg.IDetailandmedV5VaSisud>();
                if ((Reader.IsEmptyElement == false)) {
                    Reader.ReadStartElement("maa_mille_seaduse_alusel_tegutseb_markus");
                    metaMaaMilleSeaduseAluselTegutsebMarkus.NewSerializer(clazz.MaaMilleSeaduseAluselTegutsebMarkus).ReadXml(Reader);
                    Reader.ReadEndElement();
                }
                else {
                    Reader.Skip();
                }
            }
            else {
                throw new global::Xtee.Core.Exceptions.UnExpectedElementException(">>detailandmed_v5_valismaa_ariyhing>maa_mille_seaduse_alusel_tegutseb_markus", Reader.LocalName);
            }
            if (Reader.LocalName=="register") {
                if (Reader.IsElementNil()) {
                    throw new global::Xtee.Core.Exceptions.NillableNotAllowedException(">>detailandmed_v5_valismaa_ariyhing>register");
                }
                global::Xtee.Core.SerializationMetadata metaRegister = this.GetMetaData<global::Producers.Arireg.Xtee.Riik.Ee.Producer.Arireg.IDetailandmedV5VaSisud>(Reader, "detailandmed_v5_va_sisud", "http://producers.arireg.xtee.riik.ee/producer/arireg");
                clazz.Register = metaRegister.NewEntity<global::Producers.Arireg.Xtee.Riik.Ee.Producer.Arireg.IDetailandmedV5VaSisud>();
                if ((Reader.IsEmptyElement == false)) {
                    Reader.ReadStartElement("register");
                    metaRegister.NewSerializer(clazz.Register).ReadXml(Reader);
                    Reader.ReadEndElement();
                }
                else {
                    Reader.Skip();
                }
            }
            else {
                throw new global::Xtee.Core.Exceptions.UnExpectedElementException(">>detailandmed_v5_valismaa_ariyhing>register", Reader.LocalName);
            }
            if (Reader.LocalName=="registreerimisnumber") {
                if (Reader.IsElementNil()) {
                    throw new global::Xtee.Core.Exceptions.NillableNotAllowedException(">>detailandmed_v5_valismaa_ariyhing>registreerimisnumber");
                }
                global::Xtee.Core.SerializationMetadata metaRegistreerimisnumber = this.GetMetaData<global::Producers.Arireg.Xtee.Riik.Ee.Producer.Arireg.IDetailandmedV5VaSisud>(Reader, "detailandmed_v5_va_sisud", "http://producers.arireg.xtee.riik.ee/producer/arireg");
                clazz.Registreerimisnumber = metaRegistreerimisnumber.NewEntity<global::Producers.Arireg.Xtee.Riik.Ee.Producer.Arireg.IDetailandmedV5VaSisud>();
                if ((Reader.IsEmptyElement == false)) {
                    Reader.ReadStartElement("registreerimisnumber");
                    metaRegistreerimisnumber.NewSerializer(clazz.Registreerimisnumber).ReadXml(Reader);
                    Reader.ReadEndElement();
                }
                else {
                    Reader.Skip();
                }
            }
            else {
                throw new global::Xtee.Core.Exceptions.UnExpectedElementException(">>detailandmed_v5_valismaa_ariyhing>registreerimisnumber", Reader.LocalName);
            }
            if (Reader.LocalName=="majandusaasta_aruande_avalikustamise_kohustus") {
                if (Reader.IsElementNil()) {
                    throw new global::Xtee.Core.Exceptions.NillableNotAllowedException(">>detailandmed_v5_valismaa_ariyhing>majandusaasta_aruande_avalikustamise_kohustus" +
                            "");
                }
                global::Xtee.Core.SerializationMetadata metaMajandusaastaAruandeAvalikustamiseKohustus = this.GetMetaData<global::Producers.Arireg.Xtee.Riik.Ee.Producer.Arireg.IDetailandmedV5VaSisud>(Reader, "detailandmed_v5_va_sisud", "http://producers.arireg.xtee.riik.ee/producer/arireg");
                clazz.MajandusaastaAruandeAvalikustamiseKohustus = metaMajandusaastaAruandeAvalikustamiseKohustus.NewEntity<global::Producers.Arireg.Xtee.Riik.Ee.Producer.Arireg.IDetailandmedV5VaSisud>();
                if ((Reader.IsEmptyElement == false)) {
                    Reader.ReadStartElement("majandusaasta_aruande_avalikustamise_kohustus");
                    metaMajandusaastaAruandeAvalikustamiseKohustus.NewSerializer(clazz.MajandusaastaAruandeAvalikustamiseKohustus).ReadXml(Reader);
                    Reader.ReadEndElement();
                }
                else {
                    Reader.Skip();
                }
            }
            else {
                throw new global::Xtee.Core.Exceptions.UnExpectedElementException(">>detailandmed_v5_valismaa_ariyhing>majandusaasta_aruande_avalikustamise_kohustus" +
                        "", Reader.LocalName);
            }
        }
    }
}
